using System;
using System.Collections.Generic;
namespace Gltf
{
    public class MeshPrimitive : ExtensibleObject
    {
        public static string TypeName = "MeshPrimitive";

        /**
   * @brief Known values for The topology type of primitives to render.
   */

        public struct Mode
        {
            public const int POINTS = 0;

            public const int LINES = 1;

            public const int LINE_LOOP = 2;

            public const int LINE_STRIP = 3;

            public const int TRIANGLES = 4;

            public const int TRIANGLE_STRIP = 5;

            public const int TRIANGLE_FAN = 6;
        };

        /**
         * @brief A plain JSON object, where each key corresponds to a mesh attribute
         * semantic and each value is the index of the accessor containing attribute's
         * data.
         */
        public Dictionary<string, int> attributes = new Dictionary<string, int>();

        /**
         * @brief The index of the accessor that contains the vertex indices.
         *
         * When this is undefined, the primitive defines non-indexed geometry.  When
         * defined, the accessor **MUST** have `SCALAR` type and an unsigned integer
         * component type.
         */
        public int indices = -1;

        /**
         * @brief The index of the material to apply to this primitive when rendering.
         */
        public int material = -1;

        /**
         * @brief The topology type of primitives to render.
         *
         * Known values are defined in {@link Mode}.
         *
         */
        public int mode = Mode.TRIANGLES;

        /**
         * @brief An array of morph targets.
         */
        List<Dictionary<string, int>> targets = new List<Dictionary<string, int>>();

    }
}